package com.unju.ventanas.usuario;

import java.awt.Dimension;
import java.awt.Font;
import java.awt.Toolkit;
import java.util.Iterator;

import javax.swing.ButtonGroup;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.border.TitledBorder;

import com.unju.hibernate.entidades.Perfil;
import com.unju.hibernate.entidades.Responsable;
import com.unju.hibernate.entidades.Usuario;
import com.unju.hibernate.patronDAO.imp.PerfilDAOImp;
import com.unju.utils.AllShowMessage;
import com.unju.utils.ConstantesGlobales;
import com.unju.ventanas.principal.JFrmPrincipal;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;



public class JDialogDetalleUsuarioResponsable extends JDialog{

	private static final long serialVersionUID = 1L;
	JPanel pDatosPersonales;
	JPanel pUsuario;
	private JTextField txtApellido;
	private JTextField txtNombre;
	private JTextField txtDni;
	private JTextField txtCalle;
	private JTextField txtBarrio;
	private JTextField txtNro;
	private JTextField txtLocalidad;
	private JTextField txtProvincia;
	private JTextField txtTelefono;
	private JTextField txtCelular;
	private JTextField txtLegajo;
	private JTextField txtEMail;
	private JComboBox<Perfil> cmbTiposUsuarios;
	private JTextField txtNombreDeUsuario;
	private JPasswordField txtSuContrasea;
	private JPasswordField txtRepContrasenia;
	private JRadioButton rdbtnActiva;
	private JRadioButton rdbtnInactiva;
	private JLabel lblCuenta;
	private JLabel lblNuevoUsuario;
	Usuario usu;
	public JDialogDetalleUsuarioResponsable(JFrmPrincipal principal,Usuario u) {
		crearVentana();
		initButton();
		panelDatoPer();
		panelUserPass();
		usu=u;
		this.setModal(true);	
		cargarTipos();
		cargarDatosUsuario(usu);
		habilitarResponsable(false);
		habilitarUsuarioComun(false);
		setVisible(true);					
	}
	
	public void crearVentana(){
		setIconImage(Toolkit.getDefaultToolkit().getImage(JDialogNuevoUsuario.class.getResource("/com/unju/img/User.png")));
		setPreferredSize(new Dimension(840, 430)); 		
		setMinimumSize(new Dimension(840,430));
		setMaximumSize(new Dimension(840,430));	
		setBounds(0, 0, 840, 430);
		setLocationRelativeTo(null);
		getContentPane().setLayout(null);
		setTitle(ConstantesGlobales.EDITAR_USUARIO);
	}
	
	public void panelDatoPer(){
		pDatosPersonales = new JPanel();
		pDatosPersonales.setBorder(new TitledBorder(null, "Datos Personales", TitledBorder.LEFT, TitledBorder.TOP, null, null));
		pDatosPersonales.setBounds(10, 50, 804, 160);		
		pDatosPersonales.setLayout(null);
		getContentPane().add(pDatosPersonales);
		
		JLabel lblApellido = new JLabel("Apellido:");
		lblApellido.setBounds(28, 60, 70, 14);
		pDatosPersonales.add(lblApellido);
		
		JLabel lblNombre = new JLabel("Nombre:");
		lblNombre.setBounds(28, 85, 70, 14);
		pDatosPersonales.add(lblNombre);
		
		JLabel lblDni = new JLabel("DNI:");
		lblDni.setBounds(28, 110, 70, 14);
		pDatosPersonales.add(lblDni);
		
		JLabel lblUsuario = new JLabel("Calle:");
		lblUsuario.setBounds(231, 60, 39, 14);
		pDatosPersonales.add(lblUsuario);
		
		JLabel lblN = new JLabel("N\u00B0:");
		lblN.setBounds(590, 60, 66, 14);
		pDatosPersonales.add(lblN);
		
		JLabel lblBarrio = new JLabel("Barrio:");
		lblBarrio.setBounds(231, 85, 46, 14);
		pDatosPersonales.add(lblBarrio);
		
		txtApellido = new JTextField();
		txtApellido.setBounds(98, 55, 123, 20);
		pDatosPersonales.add(txtApellido);
		txtApellido.setColumns(10);
		
		txtNombre = new JTextField();
		txtNombre.setColumns(10);
		txtNombre.setBounds(98, 80, 123, 20);
		pDatosPersonales.add(txtNombre);
		
		txtDni = new JTextField();
		txtDni.setColumns(10);
		txtDni.setBounds(98, 105, 123, 20);
		pDatosPersonales.add(txtDni);
		
		txtCalle = new JTextField();
		txtCalle.setColumns(10);
		txtCalle.setBounds(290, 55, 270, 20);
		pDatosPersonales.add(txtCalle);
		
		txtBarrio = new JTextField();
		txtBarrio.setColumns(10);
		txtBarrio.setBounds(290, 80, 270, 20);
		pDatosPersonales.add(txtBarrio);
		
		txtNro = new JTextField();
		txtNro.setBounds(655, 55, 127, 20);
		pDatosPersonales.add(txtNro);
		txtNro.setColumns(10);
		
		JLabel lblLocalidad = new JLabel("Localidad:");
		lblLocalidad.setBounds(231, 110, 59, 14);
		pDatosPersonales.add(lblLocalidad);
		
		txtLocalidad = new JTextField();
		txtLocalidad.setColumns(10);
		txtLocalidad.setBounds(290, 105, 270, 20);
		pDatosPersonales.add(txtLocalidad);
		
		JLabel lblProvincia = new JLabel("Provincia:");
		lblProvincia.setBounds(231, 130, 59, 14);
		pDatosPersonales.add(lblProvincia);
		
		txtProvincia = new JTextField();
		txtProvincia.setColumns(10);
		txtProvincia.setBounds(290, 130, 270, 20);
		pDatosPersonales.add(txtProvincia);		
		
		JLabel lblTel = new JLabel("Telefono:");
		lblTel.setBounds(590, 85, 66, 14);
		pDatosPersonales.add(lblTel);
		
		JLabel lblCelular = new JLabel("Celular:");
		lblCelular.setBounds(590, 110, 66, 14);
		pDatosPersonales.add(lblCelular);
		
		txtTelefono = new JTextField();
		txtTelefono.setBounds(655, 80, 127, 20);
		pDatosPersonales.add(txtTelefono);
		txtTelefono.setColumns(10);
		
		txtCelular = new JTextField();
		txtCelular.setBounds(655, 105, 127, 20);
		pDatosPersonales.add(txtCelular);
		txtCelular.setColumns(10);
		
		JLabel lblLegajo = new JLabel("Legajo:");
		lblLegajo.setBounds(28, 130, 70, 14);
		pDatosPersonales.add(lblLegajo);
		
		txtLegajo = new JTextField();			
		txtLegajo.setBounds(98, 130, 123, 20);
		pDatosPersonales.add(txtLegajo);
		txtLegajo.setColumns(10);
		
		JLabel lblEmail = new JLabel("e-mail:");
		lblEmail.setBounds(590, 130, 66, 14);
		pDatosPersonales.add(lblEmail);
		
		txtEMail = new JTextField();
		txtEMail.setBounds(655, 130, 127, 20);
		pDatosPersonales.add(txtEMail);
		txtEMail.setColumns(10);
	}

	
	public void panelUserPass(){
		pUsuario = new JPanel();
		pUsuario.setLayout(null);
		pUsuario.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "Usuario y Contrase\u00F1a", TitledBorder.LEFT, TitledBorder.TOP, null, null));
		pUsuario.setBounds(10, 220, 804, 113);
		getContentPane().add(pUsuario);
		
		JLabel lblContrasea = new JLabel("Contrase\u00F1a");
		lblContrasea.setBounds(300, 47, 97, 14);
		pUsuario.add(lblContrasea);
		
		JLabel label_6 = new JLabel("Usuario:");
		label_6.setBounds(20, 47, 66, 14);
		pUsuario.add(label_6);
		
		JLabel lblRepContrasenia = new JLabel("Tipo de Usuario:");
		lblRepContrasenia.setBounds(20, 77, 102, 14);
		pUsuario.add(lblRepContrasenia);
		
		cmbTiposUsuarios = new JComboBox<Perfil>();		
		cmbTiposUsuarios.setBounds(120, 75, 160, 20);		
		pUsuario.add(cmbTiposUsuarios);
		
		txtNombreDeUsuario = new JTextField();				
		txtNombreDeUsuario.setBounds(120, 44, 160, 20);
		pUsuario.add(txtNombreDeUsuario);
		txtNombreDeUsuario.setColumns(10);
		
		txtSuContrasea =  new JPasswordField();	
		txtSuContrasea.setBounds(420, 44, 137, 20);
		pUsuario.add(txtSuContrasea);
		txtSuContrasea.setColumns(10);
		
		JLabel lblRepetirContrasea = new JLabel("Repetir Contrase\u00F1a:");
		lblRepetirContrasea.setBounds(300, 78, 120, 14);
		pUsuario.add(lblRepetirContrasea);
		
		txtRepContrasenia =  new JPasswordField();		
		txtRepContrasenia.setColumns(10);
		txtRepContrasenia.setBounds(420, 75, 137, 20);
		pUsuario.add(txtRepContrasenia);
		
		lblCuenta = new JLabel("Cuenta:");
		lblCuenta.setBounds(580, 30, 46, 14);
		pUsuario.add(lblCuenta);
		
		rdbtnActiva = new JRadioButton("Activa");
		rdbtnActiva.setBounds(635, 43, 109, 23);
		rdbtnActiva.setSelected(true);
		pUsuario.add(rdbtnActiva);		
		rdbtnInactiva = new JRadioButton("Inactiva");
		rdbtnInactiva.setBounds(635, 73, 109, 23);
		pUsuario.add(rdbtnInactiva);
		ButtonGroup op1= new ButtonGroup();
		op1.add(rdbtnActiva);
		op1.add(rdbtnInactiva);		
		
		lblNuevoUsuario = new JLabel("Modificacion de Usuario");
		lblNuevoUsuario.setFont(new Font("Tahoma", Font.BOLD, 20));
		lblNuevoUsuario.setBounds(250, 10, 250, 25);
		getContentPane().add(lblNuevoUsuario);
		
		JButton btnNewButton = new JButton(ConstantesGlobales.BTN_SALIR);
		btnNewButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				dispose();
			}
		});
		btnNewButton.setBounds(342, 358, 89, 23);
		getContentPane().add(btnNewButton);
	}

	public void initButton(){
	}
	
	private void habilitarResponsable(boolean est){
		txtApellido.setEnabled(est);
		txtBarrio.setEnabled(est);
		txtCalle.setEnabled(est);
		txtCelular.setEnabled(est);
		txtDni.setEnabled(est);
		txtLegajo.setEnabled(est);
		txtNombre.setEnabled(est);
		txtNro.setEnabled(est);
		txtProvincia.setEnabled(est);
		txtTelefono.setEnabled(est);
		txtLocalidad.setEnabled(est);
		txtEMail.setEnabled(est);		
	}
	private void habilitarUsuarioComun(boolean est){
		txtNombreDeUsuario.setEnabled(est);
		txtSuContrasea.setEnabled(est);
		txtRepContrasenia.setEnabled(est);
		cmbTiposUsuarios.setEnabled(est);	
		rdbtnActiva.setEnabled(est);
		rdbtnInactiva.setEnabled(est);
	}
	/**
	 * No deberia devolver dos Tipos de Usuarios con el mismo nombre
	 */
	private void cargarTipos(){		
		try {
			 DefaultComboBoxModel<Perfil> modeloCombo = new DefaultComboBoxModel<Perfil>();
			
			Iterator<Perfil> iterador = new PerfilDAOImp().getAll().iterator(); //Le solicito a la lista que me devuelva un iterador con todos los el elementos contenidos en ella			 
			//Mientras que el iterador tenga un proximo elemento
			while( iterador.hasNext() ) {
			       Perfil perfil = (Perfil) iterador.next();
			       modeloCombo.addElement(perfil);
			       //cmbTiposUsuarios.addItem(perfil);			      
			}		
			cmbTiposUsuarios.setModel(modeloCombo);
		} catch (Exception e) {
			AllShowMessage.showErrorMessage(ConstantesGlobales.MENSAJE_LISTA_ERROR+e);
		}				
	}
	public Responsable getResponsable(){
		Responsable r=new Responsable();
		r.setApellido(txtApellido.getText());
		r.setBarrio(txtBarrio.getText());
		r.setCalle(txtCalle.getText());
		r.setCelular(txtCelular.getText());
		r.setDni(Integer.valueOf(txtDni.getText()));
		r.setLegajo(Integer.valueOf(txtLegajo.getText()));
		r.setNombre(txtNombre.getText());
		r.setNumero(Integer.valueOf(txtNro.getText()));
		r.setProvincia(txtProvincia.getText());
		r.setTelefono(txtTelefono.getText());
		r.setLocalidad(txtLocalidad.getText());
		r.setEmail(txtEMail.getText());
		return r;		
	}	
	public void cargarDatosUsuario(Usuario u){
		try {							
			txtApellido.setText(u.getResponsable().getApellido());
			txtBarrio.setText(u.getResponsable().getBarrio());
			txtCalle.setText(u.getResponsable().getCalle());
			txtCelular.setText(u.getResponsable().getCelular());
			txtDni.setText(String.valueOf(u.getResponsable().getDni()));
			txtLegajo.setText(String.valueOf(u.getResponsable().getLegajo()));
			txtNombre.setText(u.getResponsable().getNombre());
			txtNro.setText(String.valueOf(u.getResponsable().getNumero()));
			txtProvincia.setText(u.getResponsable().getProvincia());
			txtTelefono.setText(u.getResponsable().getTelefono());
			txtLocalidad.setText(u.getResponsable().getLocalidad());
			txtEMail.setText(u.getResponsable().getEmail());
			
			txtSuContrasea.setText(u.getClave());
			txtRepContrasenia.setText(u.getClave());
			txtNombreDeUsuario.setText(u.getNombreUsuario());
			
			cmbTiposUsuarios.setSelectedItem(obtenerPosListaPerfil(u.getPerfil()));
			
			if(u.isEstado())
				rdbtnActiva.setSelected(true);
			else
				rdbtnInactiva.setSelected(true);									
		} catch (Exception e) {
			AllShowMessage.showMessage("Error al cargar los datos, Causa de Error: "+e);
		}		
	}
	private int obtenerPosListaPerfil(Perfil p){
		Iterator<Perfil> iterador = new PerfilDAOImp().getAll().iterator();
		int pos = 0,i=0;
		while( iterador.hasNext() ) {
		       Perfil perfil = (Perfil) iterador.next();		       
		       if(p.getIdPerfil()==perfil.getIdPerfil())
		    	   pos=i;
		       i++;
		}	
		return pos;
	}	
}
